﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Web.Mvc;
using MotoreDataBase.MotoreDbException;

namespace MvcSite.Models
{
    public class GestoreNotizie : GestoreBase
    {
        public static List<Notizia> ListNotice(bool complete)
        {
            MotoreDataBase.GestoreBase.stringConnection = stringConnection;
            List<Notizia> notizie = new List<Notizia>();
            if (complete)
                notizie = MotoreDataBase.GestoreBase.GetList<Notizia>();
            else
            {
                Type tipo = typeof(Notizia);
                notizie = MotoreDataBase.GestoreBase.GetList<Notizia>(tipo.GetProperty("Id"), tipo.GetProperty("Titolo"), tipo.GetProperty("DataCreazione"), tipo.GetProperty("DataPub"), tipo.GetProperty("Categoria"), tipo.GetProperty("Stato"));
            }

            //using (SqlConnection objConn = new SqlConnection(stringConnection))
            //{
            //    objConn.Open();
            //    string query = string.Empty;
            //    if (complete)
            //        query = "SELECT * FROM Notizie";
            //    else
            //        query = "SELECT id,titolo,data_creazione,data_pub,categoria,stato FROM Notizie";
            //    SqlCommand objCmd = new SqlCommand(query, objConn);
            //    using (SqlDataReader reader = objCmd.ExecuteReader())
            //    {
            //        while (reader.Read())
            //        {
            //           //if(complete)
            //               notizie.Add(new Notizia(reader));
            //           //else
            //           //    notizie.Add(new Notizia(int.Parse(reader["id"].ToString()), reader["titolo"].ToString(), string.Empty, DateTime.Parse(reader["data_creazione"].ToString()), DateTime.Parse(reader["data_pub"].ToString()), Stato.InAttesa, reader["categoria"].ToString()));
            //        }
                        
            //    }
                
            //}
            return notizie;
        }

        public static void InsertNotizia(Notizia notizia)
        {
            notizia = MotoreDataBase.GestoreBase.InsertWithId<Notizia>(notizia);
        }

        public static List<String> ListCategorie()
        {
            List<string> categorie = new List<string>();
            categorie = MotoreDataBase.GestoreBase.ExecuteNonQueryToListOfString<Notizia>("GetCategorie");
            //using (SqlConnection objConn = new SqlConnection(stringConnection))
            //{
            //    objConn.Open();
            //    string query = "SELECT * FROM categorie_notizie";
            //    SqlCommand objCmd = new SqlCommand(query, objConn);
            //    using (SqlDataReader reader = objCmd.ExecuteReader())
            //    {
            //        while (reader.Read())
            //            categorie.Add(reader["nome_categoria"].ToString());
            //    }
            //}
            return categorie;
        }


        public static void SaveNewNotice(string Titolo, string Categoria, string TextArea, string stato)
        {
            MotoreDataBase.GestoreBase.stringConnection = stringConnection;
            MotoreDataBase.GestoreBase.ExecuteNonQueryModifyDb<Notizia>("InsertNewNotizia",
                new MotoreDataBase.Parameter("titolo", Titolo),
                new MotoreDataBase.Parameter("testo", TextArea),
                new MotoreDataBase.Parameter("data_creazione", DateTime.Now),
                new MotoreDataBase.Parameter("data_pub", DateTime.Now),
                new MotoreDataBase.Parameter("stato", stato),
                new MotoreDataBase.Parameter("categoria", Categoria));
        }

        public static void UpdateNotice(int id, string Titolo, string ListCategorie, string TextArea)
        {
            throw new NotImplementedException();
        }

        public static void DeleteNotice(int id)
        {
            MotoreDataBase.GestoreBase.stringConnection = stringConnection;
            using (SqlConnection objConn = new SqlConnection(stringConnection))
            {
                objConn.Open();
                string query = "DELETE Notizie WHERE id = @id";
                SqlCommand objCmd = new SqlCommand(query, objConn);
                objCmd.Parameters.Add("id", id);
                objCmd.ExecuteNonQuery();
            }
            
        }

        public static void UpdateNewNotice(int id, string Titolo, string Categoria, string TextArea, string stato)
        {
            using (SqlConnection objConn = new SqlConnection(stringConnection))
            {
                objConn.Open();
                string query = "UPDATE Notizie SET titolo=@titolo, testo=@testo, data_creazione=@data_creazione, data_pub=@data_pub, stato=@stato, categoria=@categoria WHERE id = @id";
                SqlCommand objCmd = new SqlCommand(query, objConn);
                objCmd.Parameters.Add("id", id);
                objCmd.Parameters.Add("titolo", Titolo);
                objCmd.Parameters.Add("testo", TextArea);
                objCmd.Parameters.Add("data_creazione", DateTime.Now);
                objCmd.Parameters.Add("data_pub", DateTime.Now);
                objCmd.Parameters.Add("stato", stato);
                objCmd.Parameters.Add("categoria", Categoria);
                int n_row = objCmd.ExecuteNonQuery();
            }
        }

        public static Notizia CaricaNotizia(int id)
        {
            Notizia notizia = null;
            using (SqlConnection objConn = new SqlConnection(stringConnection))
            {
                objConn.Open();
                string query = "SELECT * FROM Notizie WHERE id = @id";
                SqlCommand objCmd = new SqlCommand(query, objConn);
                objCmd.Parameters.Add("id", id);
                using (SqlDataReader reader = objCmd.ExecuteReader())
                {
                    while (reader.Read())
                        notizia = new Notizia(reader); 
                }
            }
            return notizia;
        }


        public static List<SelectListItem> SelectListCategorie(string selezionata)
        {
            List<SelectListItem> items = new List<SelectListItem>();
            SelectListItem item;
            foreach (string value in GestoreNotizie.ListCategorie())
            {
                item = new SelectListItem { Value = value, Text = value.ToString() };
                if (!string.IsNullOrEmpty(selezionata) && value == selezionata)
                    item.Selected = true;
                items.Add(item);
            }
            return items;
        }

        public static List<Notizia> GetNotizie(int n, string categoria)
        {
            List<Notizia> Notizie = new List<Notizia>();
            using (SqlConnection objConn = new SqlConnection(stringConnection))
            {
                objConn.Open();
                string query = string.Empty;
                if(n != 0)
                    query = string.Format("SELECT TOP {0} * FROM Notizie", n);
                else
                    query = "SELECT * FROM Notizie";
                if(!string.IsNullOrEmpty(categoria))
                    string.Concat(query, string.Format(" WHERE categoria = '{0}'", categoria));
                SqlCommand objCmd = new SqlCommand(query, objConn);
                using (SqlDataReader reader = objCmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Notizie.Add(new Notizia(reader));
                    }
                }
            }
            return Notizie;
        }


        public static Notizia GetNotizia(int id)
        {
            try
            {
                return MotoreDataBase.GestoreBase.ExecuteNonQueryToObject<Notizia>("SelectId", new MotoreDataBase.Parameter("Id", id));
            }
            catch (ItemNotFoundException ex)
            {
                return null;
            }
            //using (SqlConnection objConn = new SqlConnection(stringConnection))
            //{
            //    objConn.Open();
            //    string query = "SELECT * FROM Notizie WHERE id = @id";
            //    SqlCommand objCmd = new SqlCommand(query, objConn);
            //    objCmd.Parameters.Add("id", id);
            //    using (SqlDataReader reader = objCmd.ExecuteReader())
            //    {
            //        if (reader.Read())
            //            return new Notizia(reader);
            //    }
            //}
        }

        public static List<Notizia> LastNotice()
        {
            MotoreDataBase.GestoreBase.stringConnection = stringConnection;
            List<Notizia> list = new List<Notizia>();

            list = MotoreDataBase.GestoreBase.ExecuteNonQueryToList<Notizia>("SelectLastNotice");
            foreach (var item in list)
            {
                item.GetAnteprimaNotizia();
            }

            //using (SqlConnection objConn = new SqlConnection(stringConnection))
            //{
            //    objConn.Open();
            //    string query = string.Format("SELECT TOP {0} * FROM Notizie WHERE (data_pub IS NOT NULL) ORDER BY data_pub DESC", 3);
            //    SqlCommand objCmd = new SqlCommand(query, objConn);
            //    using (SqlDataReader reader = objCmd.ExecuteReader())
            //    {
            //        Notizia notizia;
            //        while (reader.Read())
            //        {
            //            notizia = new Notizia(reader);
            //            notizia.GetAnteprimaNotizia();
            //            list.Add(notizia);
            //        }   
            //    }
            //}
            return list;
        }
    }
}